#ifndef _UINT_COLOUR_H_
#define _UINT_COLOUR_H_

////////////////////////////////////////////////////////////////////////////////
// Includes
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Namespaces
////////////////////////////////////////////////////////////////////////////////

namespace Types {

////////////////////////////////////////////////////////////////////////////////
// Implementation
////////////////////////////////////////////////////////////////////////////////

/**
 *  Unsigned int RGB colour
 */
class UIntColour {

	public:

		/// Constructor
		UIntColour()
		: red(0), green(0), blue(0)
		{}

		/// Constructor with initial values
		UIntColour(const unsigned int r, const unsigned int g, const unsigned int b)
		:	red(r), green(g), blue(b)
		{}

		/// Creates a copy of the given instance
		UIntColour(const UIntColour & inst)
		:	red(inst.red), green(inst.green), blue(inst.blue)
		{}
		
		/// Affectation operator
		UIntColour & operator = (const UIntColour & inst) {
			if (this != &inst) {
				this->red = inst.red;
				this->green = inst.green;
				this->blue = inst.blue;
			}
			return *this;
		}

		/// Returns the red value (read-only)
		const unsigned int GetRed() const { return this->red; }
		
		/// Returns the red value
		unsigned int & Red() { return this->red; }

		/// Returns the green value (read-only)
		const unsigned int GetGreen() const { return this->green; }
		
		/// Returns the green value
		unsigned int & Green() { return this->green; }
		
		/// Returns the blue value (read-only)
		const unsigned int GetBlue() const { return this->blue; }
		
		/// Returns the blue value
		unsigned int & Blue() { return this->blue; }
		
	protected:

		/// Colours
		unsigned int red, green ,blue;

};

////////////////////////////////////////////////////////////////////////////////
// Closing Namespaces
////////////////////////////////////////////////////////////////////////////////

}

////////////////////////////////////////////////////////////////////////////////

#endif
